home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / sound / sb16_csp.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  5KB  |  168 lines

  1. #ifndef __SOUND_SB16_CSP_H
  2. #define __SOUND_SB16_CSP_H
  3.  
  4. /*
  5.  *  Copyright (c) 1999 by Uros Bizjak <uros@kss-loka.si>
  6.  *                        Takashi Iwai <tiwai@suse.de>
  7.  *
  8.  *  SB16ASP/AWE32 CSP control
  9.  *
  10.  *   This program is free software; you can redistribute it and/or modify 
  11.  *   it under the terms of the GNU General Public License as published by
  12.  *   the Free Software Foundation; either version 2 of the License, or
  13.  *   (at your option) any later version.
  14.  *
  15.  *   This program is distributed in the hope that it will be useful,
  16.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  *   GNU General Public License for more details.
  19.  *
  20.  *   You should have received a copy of the GNU General Public License
  21.  *   along with this program; if not, write to the Free Software
  22.  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  23.  *
  24.  */
  25.  
  26. /* CSP modes */
  27. #define SNDRV_SB_CSP_MODE_NONE        0x00
  28. #define SNDRV_SB_CSP_MODE_DSP_READ    0x01    /* Record from DSP */
  29. #define SNDRV_SB_CSP_MODE_DSP_WRITE    0x02    /* Play to DSP */
  30. #define SNDRV_SB_CSP_MODE_QSOUND        0x04    /* QSound */
  31.  
  32. /* CSP load flags */
  33. #define SNDRV_SB_CSP_LOAD_FROMUSER    0x01
  34. #define SNDRV_SB_CSP_LOAD_INITBLOCK    0x02
  35.  
  36. /* CSP sample width */
  37. #define SNDRV_SB_CSP_SAMPLE_8BIT        0x01
  38. #define SNDRV_SB_CSP_SAMPLE_16BIT        0x02
  39.  
  40. /* CSP channels */
  41. #define SNDRV_SB_CSP_MONO            0x01
  42. #define SNDRV_SB_CSP_STEREO        0x02
  43.  
  44. /* CSP rates */
  45. #define SNDRV_SB_CSP_RATE_8000        0x01
  46. #define SNDRV_SB_CSP_RATE_11025        0x02
  47. #define SNDRV_SB_CSP_RATE_22050        0x04
  48. #define SNDRV_SB_CSP_RATE_44100        0x08
  49. #define SNDRV_SB_CSP_RATE_ALL        0x0f
  50.  
  51. /* CSP running state */
  52. #define SNDRV_SB_CSP_ST_IDLE        0x00
  53. #define SNDRV_SB_CSP_ST_LOADED        0x01
  54. #define SNDRV_SB_CSP_ST_RUNNING        0x02
  55. #define SNDRV_SB_CSP_ST_PAUSED        0x04
  56. #define SNDRV_SB_CSP_ST_AUTO        0x08
  57. #define SNDRV_SB_CSP_ST_QSOUND        0x10
  58.  
  59. /* maximum QSound value (180 degrees right) */
  60. #define SNDRV_SB_CSP_QSOUND_MAX_RIGHT    0x20
  61.  
  62. /* maximum microcode RIFF file size */
  63. #define SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE    0x3000
  64.  
  65. /* microcode header */
  66. typedef struct snd_sb_csp_mc_header {
  67.     char codec_name[16];        /* id name of codec */
  68.     unsigned short func_req;    /* requested function */
  69. } snd_sb_csp_mc_header_t;
  70.  
  71. /* microcode to be loaded */
  72. typedef struct snd_sb_csp_microcode {
  73.     snd_sb_csp_mc_header_t info;
  74.     unsigned char data[SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE];
  75. } snd_sb_csp_microcode_t;
  76.  
  77. /* start CSP with sample_width in mono/stereo */
  78. typedef struct snd_sb_csp_start {
  79.     int sample_width;    /* sample width, look above */
  80.     int channels;        /* channels, look above */
  81. } snd_sb_csp_start_t;
  82.  
  83. /* CSP information */
  84. typedef struct snd_sb_csp_info {
  85.     char codec_name[16];        /* id name of codec */
  86.     unsigned short func_nr;        /* function number */
  87.     unsigned int acc_format;    /* accepted PCM formats */
  88.     unsigned short acc_channels;    /* accepted channels */
  89.     unsigned short acc_width;    /* accepted sample width */
  90.     unsigned short acc_rates;    /* accepted sample rates */
  91.     unsigned short csp_mode;    /* CSP mode, see above */
  92.     unsigned short run_channels;    /* current channels  */
  93.     unsigned short run_width;    /* current sample width */
  94.     unsigned short version;        /* version id: 0x10 - 0x1f */
  95.     unsigned short state;        /* state bits */
  96. } snd_sb_csp_info_t;
  97.  
  98. /* HWDEP controls */
  99. /* get CSP information */
  100. #define SNDRV_SB_CSP_IOCTL_INFO        _IOR('H', 0x10, snd_sb_csp_info_t)
  101. /* load microcode to CSP */
  102. #define SNDRV_SB_CSP_IOCTL_LOAD_CODE    _IOW('H', 0x11, snd_sb_csp_microcode_t)
  103. /* unload microcode from CSP */
  104. #define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE    _IO('H', 0x12)
  105. /* start CSP */
  106. #define SNDRV_SB_CSP_IOCTL_START        _IOW('H', 0x13, snd_sb_csp_start_t)
  107. /* stop CSP */
  108. #define SNDRV_SB_CSP_IOCTL_STOP        _IO('H', 0x14)
  109. /* pause CSP and DMA transfer */
  110. #define SNDRV_SB_CSP_IOCTL_PAUSE        _IO('H', 0x15)
  111. /* restart CSP and DMA transfer */
  112. #define SNDRV_SB_CSP_IOCTL_RESTART    _IO('H', 0x16)
  113.  
  114. #ifdef __KERNEL__
  115. #include "sb.h"
  116. #include "hwdep.h"
  117.  
  118. typedef struct snd_sb_csp snd_sb_csp_t;
  119.  
  120. /*
  121.  * CSP operators
  122.  */
  123. typedef struct {
  124.     int (*csp_use) (snd_sb_csp_t * p);
  125.     int (*csp_unuse) (snd_sb_csp_t * p);
  126.     int (*csp_autoload) (snd_sb_csp_t * p, int pcm_sfmt, int play_rec_mode);
  127.     int (*csp_start) (snd_sb_csp_t * p, int sample_width, int channels);
  128.     int (*csp_stop) (snd_sb_csp_t * p);
  129.     int (*csp_qsound_transfer) (snd_sb_csp_t * p);
  130. } snd_sb_csp_ops_t;
  131.  
  132. /*
  133.  * CSP private data
  134.  */
  135. struct snd_sb_csp {
  136.     sb_t *chip;        /* SB16 DSP */
  137.     int used;        /* usage flag - exclusive */
  138.     char codec_name[16];    /* name of codec */
  139.     unsigned short func_nr;    /* function number */
  140.     unsigned int acc_format;    /* accepted PCM formats */
  141.     int acc_channels;    /* accepted channels */
  142.     int acc_width;        /* accepted sample width */
  143.     int acc_rates;        /* accepted sample rates */
  144.     int mode;        /* MODE */
  145.     int run_channels;    /* current CSP channels */
  146.     int run_width;        /* current sample width */
  147.     int version;        /* CSP version (0x10 - 0x1f) */
  148.     int running;        /* running state */
  149.  
  150.     snd_sb_csp_ops_t ops;    /* operators */
  151.  
  152.     spinlock_t q_lock;    /* locking */
  153.     int q_enabled;        /* enabled flag */
  154.     int qpos_left;        /* left position */
  155.     int qpos_right;        /* right position */
  156.     int qpos_changed;    /* position changed flag */
  157.  
  158.     snd_kcontrol_t *qsound_switch;
  159.     snd_kcontrol_t *qsound_space;
  160.  
  161.     struct semaphore access_mutex;    /* locking */
  162. };
  163.  
  164. int snd_sb_csp_new(sb_t *chip, int device, snd_hwdep_t ** rhwdep);
  165. #endif
  166.  
  167. #endif /* __SOUND_SB16_CSP */
  168.